package com.thghh.graph;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 长沙地铁
 *
 * @author pengzhikang
 * @date 2024/8/19 16:37
 * @since 1.0.0
 */
public class ChangshaMetro {

    public static void main(String[] args) {
        String line1 = "开福区政府、马厂、北辰三角洲、开福寺、文昌阁、培元桥、五一广场、黄兴广场、南门口、侯家塘、南湖路、黄土岭、涂家冲、铁道学院、友谊路、省政府、桂花坪、大托、中信广场、尚双塘";
        String line2 = "光达、长沙火车南、杜花路、沙湾公园、长沙大道、人民东路、万家丽广场、锦泰广场、长沙火车、袁家岭、迎宾路口、芙蓉广场、五一广场、湘江中路、橘子洲、溁湾镇、西湖公园、金星路、望城坡、梅溪湖东、文化艺术中心、麓云路、梅溪湖西";
        String line3 = "广生、螺丝塘、星沙文体中心、松雅湖、星沙、湘龙、月湖公园北、长沙大学、雅雀湖、四方坪、丝茅冲、烈士公园东、长沙火车、朝阳村、桂花公园、东塘、侯家塘、灵官渡、阜埠河、中南大学、阳光、洋湖新城、洋湖湿地、山塘";
        String line4 = "杜家坪、光达、长沙火车南、平阳、粟塘、沙湾公园、圭塘、树木岭、赤岗岭、砂子塘、黄土岭、碧沙湖、阜埠河、湖南大学、湖南师大、溁湾镇、望月湖、六沟垅、观沙岭、茶子山、福元大桥西、汉王陵公园、湘江新城、月亮岛西、罐子岭";
        String line5 = "水渡河、土桥、白茅铺、月湖公园北、马栏山、鸭子铺、火炬村、马王堆、万家丽广场、芙蓉区政府、高桥北、高桥南、圭塘、木桥、雨花区政府、大塘、板塘冲、毛竹塘";
        String line6 = "黄花机场T1T2、木马塅、大路村、龙峰、曹家坪、檀木桥、龙华、韶光、东湖、农科院农大、隆平水稻博物馆、花桥、人民东路、芙蓉区政府、朝阳村、窑岭湘雅二医院、迎宾路口、烈士公园南、湘雅医院、文昌阁、六沟垅、湘雅三医院、白鸽咀、湖南工商大学、涧塘、麓谷公园、麓谷体育公园、长丰、和馨园、长庆、一师范西校区、中塘、象鼻窝、谢家桥";


        Graph2 graph2 = new Graph2();
        addMetroLine(graph2, line1);
        addMetroLine(graph2, line2);
        addMetroLine(graph2, line3);
        addMetroLine(graph2, line4);
        addMetroLine(graph2, line5);
        addMetroLine(graph2, line6);

        List<String> dfs = graph2.dfs("马厂", "长沙火车");
        System.out.println(dfs);
    }

    /**
     * 增加地铁线路
     *
     * @param graph 图表
     * @param line  线
     * @author pengzhikang
     * @date 2024/08/19 17:03
     */
    public static void addMetroLine(Graph2 graph, String line) {
        List<String> metroLine = Arrays.asList(line.split("、"));

        // 正向
        addMetroLine(graph, metroLine);
        // 反向
        Collections.reverse(metroLine);
        addMetroLine(graph, metroLine);
    }

    private static void addMetroLine(Graph2 graph, List<String> metroLine) {
        // 添加顶点
        for (String Station : metroLine) {
            graph.addVertex(Station);
        }

        // 加入边
        for (int i = 0; i < metroLine.size() - 1; i++) {
            graph.addEdge(metroLine.get(i), metroLine.get(i + 1), 1);
        }
    }




}
